/*
 * Controlador.h
 *
 *  Created on: 18/10/2011
 *      Author: diego
 */

using namespace std;
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdlib.h>
#include <iostream>
#include <fstream>
#include <sstream>
#include "Parser.h"
#include "Stopwords.h"
#include "ArbolBinario.h"
#include "ArbolBB.h"
#include "Stopwords.h"
#include "Documentos.h"
#include "FrontCoding.h"
#include "ProgressBar.h"
#include "MonitorMemoria.h"
#include <stdio.h>
#include <algorithm>
#include <string>
#include <vector>
#include <dirent.h>
#include <sys/types.h>
#include <time.h>
#include "codigosDelta.h"
#include "IteradorIndice.h"
#include "Registros.h"
#include "IndexWriter.h"
#include "Merge.h"
#include "Configuracion.h"

#ifndef CONTROLADOR_H_
#define CONTROLADOR_H_
/*
typedef struct reg_indice_fijo_t {
	int offset_terminos;
	int repetidos; // cantidad de caracteres repetidos con el termino anterior
	int distintos; // cantidad de caracteres distintos, o sea el largo del registro variable
	int frec_t;
	int cant_docs;
	int offset_docs;
} reg_indice_fijo;

typedef struct reg_terminos_variables_t {
	string termino;
} reg_terminos_variables;

typedef struct reg_docs_variable_t {
	int doc_id;
	int frec;
} reg_docs_variable;
*/
class Controlador {
private:
	Stopwords* stpw;
	Documentos* docs;
	Parser* parser;
	ArbolBinario* arbol;
	FrontCoding* compresorTerminos;
	ProgressBar* bar;
	MonitorMemoria* memoria;
	bool serverON;

	string toString(int n);
	void grabarArbol(NodoABB* raiz, ofstream* out_ppal, ofstream* out_terminos,
			BitWriter* bit_wr, FrontCoding* compresorTerminos);
	void grabarArbol2(NodoABB* raiz, IndexWriter* idxWriter);
	vector<string> readDirectory(const string& path);
	void mergeIndices_Nvias(int cant_indices);
	void borrar_registro(super_reg* reg);
	bool file_exist(string path);
public:
	Controlador();
	void indexar(const string& path);
	void buscar(string query);
	void flushIndex();
	void startServer();
	void stopServer();
	void restartServer();
	virtual ~Controlador();
};

#endif /* CONTROLADOR_H_ */
